#ifndef TRANSACTION_H
#define TRANSACTION_H

#include <Poco/Data/Session.h>
#include <memory>
#include <stdexcept>

namespace servercom {

/**
 * @brief 数据库事务管理类
 */
class Transaction {
public:
    /**
     * @brief 创建事务对象
     * @param session 数据库会话
     * @param auto_commit 是否自动提交(默认false)
     */
    explicit Transaction(Poco::Data::Session& session, bool auto_commit = false);

    /**
     * @brief 析构函数，根据auto_commit决定是否自动提交
     */
    ~Transaction();

    /**
     * @brief 提交事务
     */
    void commit();

    /**
     * @brief 回滚事务
     */
    void rollback();

    /**
     * @brief 检查事务是否活跃
     */
    bool isActive() const;

    // 禁止拷贝和赋值
    Transaction(const Transaction&) = delete;
    Transaction& operator=(const Transaction&) = delete;

private:
    Poco::Data::Session& session_;
    bool auto_commit_;
    bool committed_;
    bool rolled_back_;
};

} // namespace servercom

#endif // TRANSACTION_H